﻿using NetDimension.NanUI;
using NetDimension.NanUI.HostWindow;
using NetDimension.NanUI.JavaScript;

namespace NanUI.Server;

internal class MinSingle : Formium
{
    /// <summary>
    ///     启动
    /// </summary>
    public MinSingle()
    {
        Size = new Size(150, 30); //设置或获取当前窗口的尺寸。
        //Subtitle = "痛苦值计算";//设置或获取当前窗口的副标题。
        //Title = "解放时间";//设置或获取当前窗口的主标题。当副标题为空时窗口显示主标题；当副标题由内容时，将显示“[副标题] - [主标题]”。如果需要修改显示样式可以通过重载GetWindowTitle方法来指定。
        AllowFullScreen = false; //是否允许当前窗体能够执行全屏操作的状态。默认值是false。当WindowType为Kiosk或Layered时此设置无效。
        AllowSystemMenu = true; //在用户右键点击可拖动区域时是否显示系统菜单。当WindowType为Kiosk时此设置无效。
        //SplashScreen//启动画面
        //SplashScreen.AutoHide = false;//启动画面自动隐藏
        ////SplashScreen.Image=

        //                       //AutoShowMask = false;//在窗体启动并等待页面加载时，是否自动显示等待页面。
        //                       //CanMaximize = false;//设置或获取当前窗体是否能够使用“最大化”命令。当WindowType为Kiosk或Layered时此设置无效。
        //                       //CanMinimize = false;//设置或获取当前窗体是否能够使用“最小化”命令。当WindowType为Kiosk时此设置无效。
        //                       //ClientSize = new System.Drawing.Size(1024, 768);//获取当前窗体的用户区域大小。
        //Height = 768;//设置或获取当前窗体的高度。
        Icon = new Icon("./Static/image/Duckling.ico"); //设置或获取当前窗体的图标。
        //             //IsFullScreen = false;//指示当前窗体是否处于全屏状态。当WindowType为Kiosk或Layered时此设置无效。
        //Left = 100;//设置或获取窗体当前所在屏幕的横坐标。

        //计算屏幕大小
        var iActulaWidth = Screen.PrimaryScreen.Bounds.Width;

        //int iActulaHeight = Screen.PrimaryScreen.Bounds.Height;

        Location = new Point(iActulaWidth - 200, 30); //设置或获取窗体当前所在屏幕的位置。
        //                                          //Mask//获取当前窗体遮罩层的实例。
        //MaximumSize = new System.Drawing.Size(400, 600);//设置或获取当前窗体能够达到的最大尺寸。当WindowType为Kiosk或Layered时此设置无效。
        //MinimumSize = new System.Drawing.Size(400, 600);//设置或获取当前窗体能够达到的最小尺寸。当WindowType为Kiosk或Layered时此设置无效。
        // ResizAble  = false;//指定当前窗口是否能够改变大小。当WindowType为Kiosk或Layered时此设置无效。ResizAble
        ShowInTaskBar = true; //设置或获取当前窗口是否在任务栏显示。当WindowType为Kiosk时此设置无效。

        StartPosition = FormStartPosition.Manual; //设置或获取窗口的启动位置。当WindowType为Kiosk时此设置无效。
        //Top = 1;//设置或获取当前窗口的纵坐标。
        TopMost = true; //设置或获取当前窗口是否为顶层窗口。
        //Width = 2;// 设置或获取当前窗口的宽度。
        //WindowState = System.Windows.Forms.FormWindowState.Normal;//设置或获取当前窗口的状态。当WindowType为Kiosk时此设置无效。

        //StartPosition = FormStartPosition.CenterScreen;

        // Set up settings for BorderlessWindow style.
        // 设置 Borderless 样式窗体的各项扩展属性，需要注意泛型T需要对应正确的WindowType
        //var style = UseExtendedStyles<BorderlessWindowStyle>();
        //style.ShadowColor = ColorTranslator.FromHtml("#614964");
        //style.ShadowEffect = ShadowEffect.Big;
        //style.CornerStyle = CornerStyle.Huge;
    }

    // 设置窗体样式类型
    public override HostWindowType WindowType => HostWindowType.Layered; //Layered Borderless

    // 指定启动 Url
    public override string StartUrl => "http://pages.app/minification.html";

    protected override void OnReady()
    {
        //LoadEnd += PageLoadEnd;
        // 在此处进行浏览器相关操作
        //ShowDevTools();//浏览器调试工具
        //ExecuteJavaScript("alert('Hello NanUI')");

        // 在此处进行浏览器相关操作
        // ExecuteJavaScript("alert('Hello NanUI')");
        //ShowDevTools();
        JumpMain();
    }

    private void JumpMain()
    {
        RegisterJavaScriptObject("fun", new JavaScriptObject
        {
            {
                "jumpMain",
                args =>
                {
                    InvokeIfRequired(() =>
                    {
                        Hide(); //隐藏当前窗体
                        Owner.Show(); //返回主窗体
                    });
                    return null;
                }
            }
        }); //然后将这个对象注册到 JavaScript 环境的Formium.external里，并取名launcher。
    }
}